<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta http-equiv="X-UA-Compatible" content="IE=edge">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>1_类的基础知识</title>
</head>
<body>
  <script type="text/javascript">
    /**
     * 总结
     *  1.类中的构造器不是必须写的，要对实例进行一些初始化操作，如果添加指定属性时才写
     *  2.如果B类继承A类，且B类中写了构造器，那么B类构造器上的super是必须要调用的
     *  3.类中所定义的方法，都是放在类的原型对象上，供实例使用
     **/
    // 创建Person类
    class Person {
      // 构造器方法
      constructor(name, age) {
        // this指向调用实例对象
        this.name = name
        this.age = age
      }
      // 普通方法
      display() {
        // speak方法放在类的原型对象 
        // 通过Person实例调用speak(),this指向Person实例对象
        console.log(`我叫${this.name},今年${this.age}`);
      }
    }

    // 创建Student类集成Person类
    class Student extends Person {
      constructor(name, age, grade) {
        super(name, age)
        this.grade = grade
      }
      // 重写父类继承的的方法
      display() {
        console.log(`我叫${this.name},今年${this.age},我在读${this.grade}`)
      }
    }

    const s1 = new Student('小张', 25, '高一')
    console.log(s1);
    s1.display()
  </script>
</body>

</html>